package com.ee.chat.common.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ee.chat.common.entity.UserImLog;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * Mapper接口
 * </p>
 *
 * @author Shane
 * @since 2019-10-14
 */
public interface UserImLogMapper extends BaseMapper<UserImLog> {
    /**
     * 获取最新的消息
     * @Author Shane
     * @Date 2019/10/14 1:05
     * @param userId    发送者id
     * @param toUserId  接收者id
     * @return
     */
    Map<String, Object> getNewsetMsg(@Param("userId") Integer userId, @Param("toUserId") Integer toUserId);

    /**
     * 获取未读消息数量
     * @Author Shane
     * @Date 2019/10/14 23:03
     * @param userId    发送者id
     * @param toUserId  接受者id
     * @return
     */
    int getNotReadMsgNum(@Param("userId") Integer userId, @Param("toUserId") Integer toUserId);

    /**
     * 获取通讯用户
     * @Author Shane
     * @Date 2019/10/1418:08
     * @param userId    发送者id
     * @return
     **/
    IPage<Integer> getIMUser(Page page, @Param("userId") Integer userId);
    
    /**
     * 获取与某用户的消息
     * @Author Shane
     * @Date 2019/10/1418:06
     * @param userId    发送者id
     * @param toUserId  接收者id
     * @param id    起始id
     * @return
     **/
    IPage<Map<String, Object>> getUserMsg(Page page, @Param("userId") Integer userId, @Param("toUserId") Integer toUserId, @Param("id") Integer id);

    /**
     * 获取用户信息
     * @Author Shane
     * @Date 2019/10/1418:49
     * @param
     * @return
     **/
    Map<String, Object> getUserInfo(@Param("userId") Integer userId);

    /**
     * 获取最新一条用户主动发送的消息
     * @Author Shane
     * @Date 2020/3/4 23:26
     * @param
     * @return
     */
    UserImLog selectNotCallMessage(@Param("fromUserId") Integer fromUserId, @Param("toUserId") Integer toUserId);

    /**
     * 获取用户主动发送的自定义消息数量
     * @param fromUserId
     * @param toUserId
     * @return
     */
    int selectNotCallMessageCount(@Param("fromUserId") Integer fromUserId, @Param("toUserId") Integer toUserId);

    /**
     * 查询消息列表
     * @Author AppiJ
     * @Date 2020/4/24 17:48
     * @param
     * @return
     */
    List<Map<String, Object>> list(@Param("fromUserId") Integer fromUserId, @Param("toUserId") Integer toUserId, @Param("type") String type,
                                   @Param("beginTime") Date beginTime, @Param("endTime") Date endTime,
                                   @Param("offset") Long offset, @Param("rows") Integer rows);

    /**
     * 获取消息列表查询总数
     * @Author AppiJ
     * @Date 2020/10/20 12:35
     * @param
     * @return
     */
    Long listCount(@Param("fromUserId") Integer fromUserId, @Param("toUserId") Integer toUserId,
                   @Param("type") String type, @Param("beginTime") Date beginTime, @Param("endTime") Date endTime);

    /**
     * 查询用户间的消息记录
     * @Author AppiJ
     * @Date 2020/4/26 17:26
     * @param
     * @return
     */
    IPage<Map<String, Object>> queryBetweenUserMsg(Page page, @Param("fromUserId") Integer fromUserId, @Param("toUserId") Integer toUserId,
                                                   @Param("type") String type, @Param("kill") Integer kill,
                                                   @Param("beginTime") Date beginTime, @Param("endTime") Date endTime);

    /**
     * 查询包含关键词的聊天消息
     * @Author AppiJ
     * @Date 2020/4/27 17:11
     * @param
     * @return
     */
    IPage<Map<String, Object>> queryUserMsgCountByKeyword(Page page, @Param("beginDate") String beginDate, @Param("endDate") String endDate);

    /**
     * 获取免费消息的总数
     * @Author Shane
     * @Date 2020/7/16 11:35
     * @param
     * @return
     */
    int getFreeMsgCount(@Param("userId") Integer userId, @Param("type") String type);

    /**
     * 获取指定时间内系统发送消息的数量
     * @Author Shane
     * @Date 2020/7/20 15:02
     * @param
     * @return
     */
    int getSysSendMsgNum(@Param("userId") Integer userId, @Param("type") String type, @Param("beginTime") Date beginTime, @Param("endTime") Date endTime);

    /**
     * 获取用户指定时间内发送的普通消息数量（不包含自定义消息）
     * @Author Shane
     * @Date 2020/8/20 18:10
     * @param
     * @return
     */
    int getMsgNum(@Param("userId") Integer userId, @Param("isSys") Integer isSys, @Param("beginTime") Date beginTime, @Param("endTime") Date EndTime);

    /**
     * 获取指定用户的im记录
     * @param fromUserId
     * @param status
     * @return
     */
    List<UserImLog> selectByUserIdAndStatus(@Param("fromUserId") Integer fromUserId, @Param("status") Integer status);
}